package common

import (
	"errors"
	"github.com/gin-gonic/gin"
	"strconv"
)

func GetPagePageSizeParams(c *gin.Context) (pageUint32 int64, pageSizeUint32 int64) {
	page := c.DefaultQuery("page", "1")
	pageSize := c.DefaultQuery("page_size", "10")
	pageInt32, _ := strconv.Atoi(page)
	pageSizeInt32, _ := strconv.Atoi(pageSize)
	return int64(pageInt32), int64(pageSizeInt32)
}

func GetIdParams(c *gin.Context) (id int, err error) {
	idStr := c.Param("id")
	if idStr == "" {
		return 0, errors.New("id不能为空")
	}
	id, err = strconv.Atoi(idStr)
	if err != nil {
		return 0, err
	}
	return id, nil
}

// ParseInt 将字符串转换为整数指针，如果转换失败或字符串为空则返回 nil
func ParseInt(s string) *int {
	if s == "" {
		return nil
	}
	num, err := strconv.Atoi(s)
	if err != nil {
		return nil
	}
	return &num
}

// ParseBool 将字符串转换为布尔值，如果转换失败则返回默认值
func ParseBool(s string, defaultValue ...bool) bool {
	// 如果传入了默认值，使用第一个作为默认值，否则默认值为 false
	def := false
	if len(defaultValue) > 0 {
		def = defaultValue[0]
	}
	// 尝试将字符串转换为布尔值
	b, err := strconv.ParseBool(s)
	if err != nil {
		return def
	}
	return b
}
